package com.google.code.gronono.gps.ui.controller.actions;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;

import com.google.code.gronono.commons.i18n.BundleKey;
import com.google.code.gronono.commons.i18n.BundleName;
import com.google.code.gronono.gps.ui.controller.GPSController;

/**
 * Action permettant d'ouvrir une boîte de dialogue de sélection d'un dossier. <br/>
 *
 * L'association entre le bouton et le champ texte recevant le dossier choisit se fait via la propriété cliente du bouton définit par {@link #FIELD_KEY} :
 * <pre><code>srcDirBrowseBtn = new JButton(browseAction);
     srcDirBrowseBtn.putClientProperty(BrowseAction.FIELD_KEY, srcDirTxt);
 * </code></pre>
 *
 * @author Arnaud BRUNET
 *
 * @see GPSController#browse(JButton)
 */
@BundleName(value = "com.google.code.gronono.gps.gui")
public class BrowseAction extends AbstractAction {
	/** serialVersionUID. */
	private static final long serialVersionUID = -388943768788907080L;

	/** Nom de l'action. */
	@BundleKey(value = "action.browse.name")
	private static String ACTION_NAME;

	/**
	 * Clé permettant d'indiquer la liaison entre le champ texte et le bouton.
	 *
	 * @see JComponent#putClientProperty(Object, Object)
	 */
	public static final String FIELD_KEY = "field";

	/** Le contrôleur. */
	private final GPSController controller;

	/**
	 * Créer l'action.
	 * @param controller Le contrôleur.
	 */
	public BrowseAction(final GPSController controller) {
		super(ACTION_NAME);
		this.controller = controller;
	}

	/*
	 * (non-Javadoc)
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(final ActionEvent e) {
		this.controller.browse((JButton) e.getSource());
	}

}
